package main;

public class Proces {
	public static final int PROCES_PRACUJE = 2;
	public static final int PROCES_USPIONY = 1;
	public static final int PROCES_NICNIEROBI = 0;
	private Double dlugoscPracy = null;
	private Double okres = null;
	private int stan = 0;
	private int piorytet = 0;
	private Double wykonanaPraca = new Double(0);
	private Double dlugoscCzekania = new Double(0);
	public static int ID_MAIN=0;
	private Integer id;

	public Proces(Double p_dlugosc, Double p_okres) {
		this.dlugoscPracy = p_dlugosc;
		this.okres = p_okres;
		this.id=++ID_MAIN;
	}

	public Integer getStan() {
		return stan;
	}
	public Integer getId(){
		return this.id;
	}


	public int getPiorytet() {
		return piorytet;
	}

	public void setPiorytet(int piorytet) {
		this.piorytet = piorytet;
	}

	public void dodajPrace() {
		if (this.stan != PROCES_PRACUJE) {
			this.stan = PROCES_PRACUJE;
		}
		this.wykonanaPraca = this.wykonanaPraca + ProcesProcessor.JEDNOSTKA_CZASU;
		if (this.wykonanaPraca.equals(this.dlugoscPracy)) {
			
			this.wykonanaPraca = new Double(0);
			this.dlugoscCzekania = this.okres;
		}
	}
	
	public void dodajPraceEDF() {
		if (this.stan != PROCES_PRACUJE) {
			this.stan = PROCES_PRACUJE;
		}
		this.wykonanaPraca = this.wykonanaPraca + ProcesProcessor.JEDNOSTKA_CZASU;
		if (this.wykonanaPraca.equals(this.dlugoscPracy)) {
			this.wykonanaPraca = new Double(0);
			this.dlugoscCzekania = this.okres;
		}
	}

	public void uspijPrace() {
		this.stan = PROCES_USPIONY;
	}

	public void czekaj() {
		this.dlugoscCzekania = this.dlugoscCzekania - ProcesProcessor.JEDNOSTKA_CZASU;
		if(this.stan==PROCES_PRACUJE){
			this.dlugoscCzekania = this.okres-1;
		}
		this.stan = PROCES_NICNIEROBI;

	}
	public Double getDlugosc(){
		return this.dlugoscPracy;
	}
	
	public String ToString(){
	return	new String("stan: "+this.stan+" piorytet:" +this.piorytet);
	}
	
	public Double getDlugoscCzekania(){
		return this.dlugoscCzekania;
	}
	
	public void czysc() {
		this.dlugoscCzekania = new Double(0);
		this.stan=0;
		this.wykonanaPraca=new Double(0);

	}
	
	public Double getOkres(){
		return this.okres;
	}

	public Double getTerminZakonczeniaPracy() {
		return this.dlugoscCzekania + this.dlugoscPracy - this.wykonanaPraca;
	}
	
	public Double getWykonanaPraca(){
		return this.wykonanaPraca;
	}

}
